package com.platform.oss.core;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import com.platform.oss.utils.OssPathUtil;

import java.io.InputStream;
import java.io.OutputStream;


public interface StandardOssClient {


    /**
     * 对象上传
     *
     * @param is 对象流
     * @param suffix 文件后缀
     * @return 返回存储对象的id
     */
    String upload(InputStream is, String suffix);

    /**
     * 对象下载
     *
     * @param fileId 对象id
     * @return 返回存储对象的流
     */
    InputStream download(String fileId);


    /**
     * 下载文件
     * @param os  输出流
     * @param targetName  目标文件路径
     */
    void downLoad(OutputStream os, String targetName);


    /**
     * 删除文件
     * @param targetName 目标文件路径
     */
    void delete(String targetName);

    /**
     * 获取完整Key
     * @param targetName 目标地址
     * @param isAbsolute 是否绝对路径
     *                   true：绝对路径；false：相对路径
     * @return 完整路径
     */
    default String getKey(String targetName, Boolean isAbsolute) {
        String key = OssPathUtil.convertPath(getBasePath() + targetName, isAbsolute);
        if (FileUtil.isWindows() && isAbsolute) {
            if (key.contains(StrUtil.COLON) && key.startsWith(StrUtil.SLASH)) {
                key = key.substring(1);
            }
        }
        return key;
    }
    /**
     * 获取文件存储根路径
     * @return 根路径
     */
    String getBasePath();
}
